package mx.com.ingsw.controller;


import java.security.NoSuchAlgorithmException;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.component.html.HtmlDataTable;
import mx.com.ingsw.dao.AlumnoDAO;
import mx.com.ingsw.dao.GrupoDAO;
import mx.com.ingsw.dao.InscripcionDAO;
import mx.com.ingsw.dao.exceptions.NonexistentEntityException;
import mx.com.ingsw.model.Alumno;
import mx.com.ingsw.model.AlumnoCompleto;
import mx.com.ingsw.model.Comprobante;
import mx.com.ingsw.model.Datos;
import mx.com.ingsw.model.Grupo;
import mx.com.ingsw.model.GrupoPK;
import mx.com.ingsw.model.Inscripcion;
import mx.com.ingsw.query.AlumnoQuery;
import mx.com.ingsw.service.ServiceAdministracion;
import mx.com.ingsw.service.ServiceAlumno;
import mx.com.ingsw.service.Verificacion;
import mx.com.ingsw.service.ServiceDatos;
import mx.com.ingsw.service.ServiceEstadisticas;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

@Controller("controllerAlumno")
@Scope("session")

public class ControllerAlumno {
    private Grupo gr;
    private Inscripcion ins;
    private InscripcionDAO dins;
    private GrupoDAO dg;
    private AlumnoDAO da;
    private int cuenta,idasignatura,numerogrupo;
    private String pass,domicilio=null,cp=null,colonia=null,ciudad=null,tel=null,cel=null,email=null,newpass=null;
    private List<Comprobante> lista;
    private HtmlDataTable datatable;
    private Alumno alum;
    private GrupoPK gpk;
    private String notificacion="";
    private AlumnoQuery qa;
    private AlumnoCompleto alumnoCompleto;
    private Datos datosAlum;
    private Comprobante com;
    private String relacionInsritos;
    
    //atributos para cambio de datos personales
    
    @PostConstruct
    public void init()
    {
        datosAlum=new Datos();
        da = new AlumnoDAO();
        dg = new GrupoDAO();
        dins= new InscripcionDAO();
        ins=new Inscripcion();
        alum=new Alumno();
        gr=new Grupo();
        gpk=new GrupoPK();
        qa=new AlumnoQuery();
        com=new Comprobante();
        //lista=com.LisComprobante(cuenta);
        
    }
   
    public String validar() throws Exception{                                   //Inicia Metodo para Validar los datos de Acceso al Usuario
       ServiceAlumno proceso = new ServiceAlumno();
       alum.setNoCuenta(cuenta);
       alum.setPasswordAlu(pass);
       if(cuenta==123 && "sifi".equals(pass))
           return"admin";
       String aux=proceso.validar(alum);
       if("Exito".equals((String)aux)){
           notificacion = "";
           return "altas";                                                      //redireccionamiento alta
       }
        else {
           notificacion = aux;
        return "";
       }         
       }//Termina Metodo para Validar los datos de Acceso al Usuario

    public String validarDaPersonales() throws Exception{                          //Inicia Metodo para Validar los datos de Acceso al Usuario
       ServiceDatos proceso = new ServiceDatos();
       alum.setNoCuenta(cuenta);
       alum.setPasswordAlu(pass);
       String aux=proceso.validarDaPersonales(alum);                                        //igual validamos que el alumno exista en la base da datos
       if("Exito".equals(aux)){
           //datosAlum.setIdDatos(cuenta);notificacion = "";
           notificacion = "";
           return "datosP";}                                                    //aqui nos vamos a la siguiente vista y es donde se pierde la referencia del numero de                    //cuenta asignado en los renglones de arriba 
        else {
            notificacion = aux;
            return "";}
       }


    public String Alta () throws Exception{      //Inicia Metodo para dar de Alta al Usuario
      ServiceAlumno proceso=new ServiceAlumno();
      gpk.setIdAsignatura(idasignatura);
      gpk.setNumeroGrupo(numerogrupo);
      String aux=proceso.Alta(alum,gpk);
      if("Exito".equals(aux))
            return "";
        else {
      if("Exito".equals(aux)){
          notificacion = "";  
          return "";
      }
      else {

          notificacion = aux;
         return "";
       }
  } //Termina Metodo para dar de Alta al Usuario
    }
    public String Baja () throws Exception{   //Inicia Metodo para dar de Baja al Usuario
     ServiceAlumno proceso=new ServiceAlumno();
      gpk.setIdAsignatura(idasignatura);
      gpk.setNumeroGrupo(numerogrupo);
     String aux=proceso.Baja(alum, gpk);
      if("Exito".equals(aux)){
          notificacion = "";
            return "";
      }
        else {
         notificacion = aux;
         return "";
       }
  }//Termina Metodo para dar de Baja al Usuario
    
    public String Cambio () throws Exception{ //Inicia Metodo para Cambiar una Asignatura del Usuario
     ServiceAlumno proceso=new ServiceAlumno();
      gpk.setIdAsignatura(idasignatura);
      gpk.setNumeroGrupo(numerogrupo);
     String aux = proceso.Cambio(alum, gpk);
      if("Exito".equals(aux)){
          notificacion = "";
          return "";
      }
        else {
         notificacion = aux;
         return "";
       }
}    
    
    public String actualizaDatos() throws Exception{
     ServiceDatos sd=new ServiceDatos();
     datosAlum.setIdDatos(cuenta);
     datosAlum.setDomicilio(domicilio);
     datosAlum.setCp(cp);
     datosAlum.setColonia(colonia);
     datosAlum.setCiudad(ciudad);
     datosAlum.setTelefono(tel);
     datosAlum.setCelular(cel);
     datosAlum.setCorreo(email);
     String aux= sd.actualizaDatos(datosAlum,newpass);
     
     if("Exito".equals(aux)){
         pass=null;
         notificacion="Datos Guardados";
         return "index"; //o que vaya a la funcion salir
     }else{
         pass=null;
         notificacion=aux;
         return "";}
     }

    
    public String Cerrar () throws Exception{
    return "index";
    }
    
    public String Finalizar () throws Exception{
    Verificacion fin=new Verificacion();
    String aux=fin.validaEdS(alum);
    if("Exito".equals(aux)){
            return "index";
            }
    return "index";
    
    //Meter salida a comprobante de Inscripcion
    }
   //2qpublic 

    public String enviaPass () throws Exception{
    ServiceAlumno proceso = new ServiceAlumno();
       alum.setNoCuenta(cuenta);
       ServiceDatos sd = new ServiceDatos();
           String aux=proceso.enviaPass(alum);
           notificacion=aux;
           return ""; //redireccionamiento actualizacion de datos personales
       
    }
    
    public List<Comprobante> getLista() {
        return (List<Comprobante>)com.LisComprobante(cuenta);
    }
    
    public AlumnoCompleto getAlumnoCompleto() throws Exception {return alumnoCompleto.alumnoCompleto(alum);}

    public Datos getDatosAlum() throws NoSuchAlgorithmException {
        ServiceAlumno proceso = new ServiceAlumno();
        datosAlum = new Datos();
        datosAlum=proceso.datos(alum);
        return datosAlum;
    }
        
    public void noInscripcion() throws NonexistentEntityException, Exception{
      ServiceAdministracion numero = new ServiceAdministracion();
       String aux=numero.genera();
       if("Exito".equals(aux)){
           notificacion = "Todo se hizo bien"; //redireccionamiento actualizacion de datos personales
       }
        else {
           notificacion = aux;
       } 
      }
    

    public String getRelacionInsritos() {
    ServiceEstadisticas se = new ServiceEstadisticas();
        return se.relacionInscritos();
    }


   //GETTER & SETTER 

    public AlumnoDAO getDa() { return da;}
    public void setDa(AlumnoDAO da) {this.da = da;}
    public GrupoDAO getDg() {return dg;}
    public void setDg(GrupoDAO dg) {this.dg = dg;}
    public InscripcionDAO getDins() {return dins;}
    public void setDins(InscripcionDAO dins) {this.dins = dins;}
    public Inscripcion getIns() {return ins;}
    public void setIns(Inscripcion ins) {this.ins = ins;}
    public Alumno getAlum() {return alum;}
    public void setAlum(Alumno alum) {this.alum = alum;}
    public GrupoPK getGpk() {return gpk;}
    public void setGpk(GrupoPK gpk) {this.gpk = gpk;}
    public Grupo getGr() {return gr;}
    public void setGr(Grupo gr) {this.gr = gr;}    
    public HtmlDataTable getDatatable() {return datatable;}
    public void setDatatable(HtmlDataTable datatable) {this.datatable = datatable;}
    public int getCuenta() {return cuenta; }
    public void setCuenta(int cuenta) {this.cuenta = cuenta;}
    public int getIdasignatura() {return idasignatura;}
    public void setIdasignatura(int idasignatura) {this.idasignatura = idasignatura;}
    public int getNumerogrupo() {return numerogrupo;}
    public void setNumerogrupo(int numerogrupo) {this.numerogrupo = numerogrupo;}
    public String getPass() {return pass;}
    public void setPass(String pass) {this.pass = pass;}
    public void setLista(List<Comprobante> lista) {this.lista = lista;}
    public String getNotificacion() {return notificacion;}
    public void setNotificacion(String notificacion) {
        this.notificacion = notificacion;
    }

    public String getCel() throws NoSuchAlgorithmException { return getDatosAlum().getCelular(); }
    public void setCel(String cel) { this.cel = cel; }
    public String getCiudad() throws NoSuchAlgorithmException {
        return getDatosAlum().getCiudad();
    }

    public void setCiudad(String ciudad) {
        this.ciudad = ciudad;
    }

    public String getColonia() throws NoSuchAlgorithmException {
        return getDatosAlum().getColonia();
    }

    public void setColonia(String colonia) {
        this.colonia = colonia;
    }

    public String getCp() throws NoSuchAlgorithmException {
        return getDatosAlum().getCp();
    }

    public void setCp(String cp) {
        this.cp = cp;
    }

    public String getDomicilio() throws NoSuchAlgorithmException {
        return getDatosAlum().getDomicilio();
    }

    public void setDomicilio(String domicilio) {
        this.domicilio = domicilio;
    }

    public String getTel() throws NoSuchAlgorithmException {
        return getDatosAlum().getTelefono();
    }

    public void setTel(String tel) {
        this.tel = tel;
    }

   
    public void setEmail(String email) {
        this.email = email;
    }

    public Comprobante getCom() {
        return com;
    }

    public void setCom(Comprobante com) {
        this.com = com;
    }

    public String getNewpass() {
        return newpass;
    }

    public void setNewpass(String newpass) {
        this.newpass = newpass;
    }

    public AlumnoQuery getQa() {
        return qa;
    }

    public void setQa(AlumnoQuery qa) {
        this.qa = qa;
    }

    public void setRelacionInsritos(String relacionInsritos) {
        this.relacionInsritos = relacionInsritos;
    }

    public String getEmail() {
        return email;
    }

    public void setAlumnoCompleto(AlumnoCompleto alumnoCompleto) {
        this.alumnoCompleto = alumnoCompleto;
    }

    public void setDatosAlum(Datos datosAlum) {
        this.datosAlum = datosAlum;
    }

}
